home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekikoh Dennoh Club 5
/
Gekikoh Dennoh Club Vol. 5 (Japan).7z
/
Gekikoh Dennoh Club Vol. 5 (Japan) (Track 01).bin
/
docs
/
rakup
/
match01.doc
< prev
next >
Wrap
Text File
|
1998-10-03
|
13KB
|
439 lines
ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬
(MATCH01.DOC)
é¿ïCèyé▓é¡éτé¡âvâìâOâëâ~âôâOôⁿûσ ö╘èOò╥ üuâGâLâXâpü[âgâVâXâeâÇé╠ì∞ɼüv
ìLêΣü@É╜
ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬
ü¢âpâ^ü[âôâ}âbâ`âôâO
âpâ^ü[âôâ}âbâ`âôâO(pattern matching)é═üuî^ìçéφé╣üvé╞éóéñîƒì⌡ò√û@é╠êΩé┬
é┼é╖üBé╜é╞éªé╬üA
üuæ╛ÿYé═âRü[âqü[é¬ìDé½üv
üuæ╛ÿYé═âRâRâAé¬ìDé½üv
üuë╘Äqé═ìgÆâé¬ìDé½üv
é╞éóéñâfü[â^é≡üAăé╠éµéñé╚âèâXâgé┼ò\é╖é▒é╞é╔é╡é▄é╖üB
(æ╛ÿY ìDé½ âRü[âqü[)
(æ╛ÿY ìDé½ âRâRâA)
(ë╘Äq ìDé½ ìgÆâ)
âpâ^ü[âôâ}âbâ`âôâOé═üAé▒é╠éµéñé╚âfü[â^é⌐éτÅεò±é≡ÆèÅoé╖éΘé╜é▀é╔ÄgéφéΩé▄
é╖üBâfü[â^é╞ô»ùlé╔âpâ^ü[âôéαâèâXâgé┼ò\é╖é╠é┼é╖é¬üAâèâXâgé╠Æåé╔âpâ^ü[âôò╧
Éö(pattern variable)é≡Ägéñé▒é╞é¬é┼é½éΘé╠é¬ô┴ÆÑé┼é╖üBâpâ^ü[âôò╧Éöé═üAéóéδ
éóéδé╚ò\î╗ò√û@é¬éáéΘé╠é┼é╖é¬üAé▒é▒é┼é═ëpæσò╢ÄÜé┼Äné▄éΘâVâôâ{âï[*1]é╞ÆΦï`
é╡é▄é╖üBâpâ^ü[âôò╧Éöé≡è▄é▐ùßé≡ăé╔Īé╡é▄é╖üB
(æ╛ÿY ìDé½ X)
(æ╛ÿY Y âRü[âqü[)
(ë╘Äq X Y)
(ë╘Äq Z Z)
âpâ^ü[âôÆåé╔âpâ^ü[âôò╧Éöé≡è▄é▄é╚éóÅΩìçé═üAequal é╔éµéΘâèâXâgé╠öΣèré╞ô»é╢
ô«ì∞é╔é╚éΦé▄é╖üBé╡é╜é¬é┴é─üA(æ╛ÿY ìDé½ âRü[âqü[) é╞éóéñâpâ^ü[âôé═üAâfü[
â^ (æ╛ÿY ìDé½ âRü[âqü[) é╞êΩÆvé╡é▄é╖é¬üA(æ╛ÿY ìDé½ âRâRâA) é╞é═êΩÆvé╡é▄
é╣é±üB
âpâ^ü[âôÆåé╔âpâ^ü[âôò╧Éöé≡è▄é±é┼éóéΘÅΩìçüAâpâ^ü[âôÆåé┼ì┼Åëé╔Åoî╗é╖éΘâp
â^ü[âôò╧Éöé═âÅâCâïâhâJü[âhé╠éµéñé╔ô¡é½é▄é╖üBé╜é╞éªé╬üA(æ╛ÿY ìDé½ X) é╞éó
éñâpâ^ü[âôé╞ (æ╛ÿY ìDé½ âRü[âqü[) é╞éóéñâfü[â^é≡â}âbâ`âôâOé│é╣é─é▌é▄é╖üB
é▒é╠ÅΩìçüAèeùvæfé≡öΣèré╡é─éóé¡é╞üAüuæ╛ÿYüvé╞üuìDé½üvé═êΩÆvé╡é▄é╖é¬üAì┼îπ
é╠ùvæf X é╞üuâRü[âqü[üvé¬ÄcéΦé▄é╖üB
(æ╛ÿY ìDé½ âRü[âqü[)
ü¬ ü¬ ü¬
ü¢ ü¢ ü¢
ü½ ü½ ü½
(æ╛ÿY ìDé½ X) X = âRü[âqü[
É} 1 : âpâ^ü[âôò╧Éöé╠ô«ì∞üié╗é╠éPüj
X é═âpâ^ü[âôò╧Éöé┼é╖é¬üAé▒é╠âpâ^ü[âôé╠Æåé┼ì┼Åëé╔î╗éΩé╜é╠é┼üAX é╞üuâRü[
âqü[üvé═êΩÆvé╖éΘé╠é┼é╖üBé╡é╜é¬é┴é─üA(æ╛ÿY ìDé½ X) é╞ (æ╛ÿY ìDé½âRü[âqü[)
é═êΩÆvé╡é▄é╖üBô»ùlé╔üA(æ╛ÿY ìDé½ X) é╞ (æ╛ÿY ìDé½ âRâRâA) éαêΩÆvé╡é▄é╖üB
(æ╛ÿY ìDé½ âRü[âqü[)
ü¬ ü¬ ü¬
ü¢ ü¢ ü¢
ü½ ü½ ü½
(æ╛ÿY Y âRü[âqü[) Y = ìDé½
(æ╛ÿY ìDé½ âRü[âqü[)
ü¬ ü¬ ü¬
ü¢ ü¢ ü~
ü½ ü½ ü½
(æ╛ÿY Y âRâRâA)
Y = ìDé½ é╛é¬ì┼îπé┼òsêΩÆvé╞é╚éΘ
É} 2 : âpâ^ü[âôò╧Éöé╠ô«ì∞üié╗é╠éQüj
âpâ^ü[âôò╧Éöé═âpâ^ü[âôÆåé╠é╟é▒é╔î╗éΩé─éαé⌐é▄éóé▄é╣é±üB(æ╛ÿY Y âRü[âqü[)
é╞ (æ╛ÿY ìDé½ âRü[âqü[) é═üAY é¬üuìDé½üvé╞êΩÆvé╖éΘé╠é┼üAâ}âbâ`âôâOé═ɼî≈
é╞é╚éΦé▄é╖üB(æ╛ÿY ìDé½ âRâRâA) é╞â}âbâ`âôâOé│é╣éΘé╞üAY é═üuìDé½üvé╞êΩÆv
é╖éΘé╠é┼é╖é¬üAüuâRü[âqü[üvé╞üuâRâRâAüvé═êΩÆvé╡é╚éóé╠é┼Ä╕ösé╡é▄é╖üB
(ë╘Äq ìDé½ ìgÆâ)
ü¬ ü¬ ü¬
ü¢ ü¢ ü¢
ü½ ü½ ü½
(æ╛ÿY X Y ) X = ìDé½, Y = ìgÆâ
É} 3 : âpâ^ü[âôò╧Éöé╠ô«ì∞üié╗é╠éRüj
é▄é╜üAâpâ^ü[âôò╧Éöé═òíÉöÄgé┴é─éαé⌐é▄éóé▄é╣é±üB(ë╘Äq X Y) é═âpâ^ü[âôò╧
Éö X é╞ Y é¬éáéΦé▄é╖é╦üBé▒éΩé╞ (ë╘Äq ìDé½ ìgÆâ) é≡â}âbâ`âôâOé│é╣é─é▌é▄é╖üB
é╖éΘé╞üAX é═üuìDé½üvüAY é═üuìgÆâüvé╞êΩÆvé╖éΘé╠é┼üAâ}âbâ`âôâOé═ɼî≈é╡é▄é╖üB
(ë╘Äq ìDé½ ìgÆâ)
ü¬ ü¬ ü¬
ü¢ ü¢ ü~
ü½ ü½ ü½
(æ╛ÿY X X )
X = ìDé½ é╛é⌐üAìgÆâé╞ X é╠ÆlüuìDé½üvé═êΩÆvé╡é╚éó
É} 4 : âpâ^ü[âôò╧Éöé╠ô«ì∞üié╗é╠éSüj
ìíôxé═üA(ë╘Äq X X) é≡ìléªé─é▌é▄é╖üBô»é╢âpâ^ü[âôò╧Éö X é¬éQë±ÄgéφéΩé─éó
é▄é╖é╦üBâfü[â^é╞êΩÆvé╡é╜âpâ^ü[âôò╧Éöé═üAé╗é╠îπâpâ^ü[âôé╠Æåé┼é═êΩÆvé╡é╜
âfü[â^é╞é╡é─ê╡éφéΩé▄é╖üB(ë╘Äq ìDé½ ìgÆâ) é╞â}âbâ`âôâOé│é╣éΘé╞üAì┼Åëé╠ X
é═üuìDé½üvé╞êΩÆvé╡é▄é╖üB2 ö╘û┌é╠ X é═üAüuìgÆâüvé╞öΣèré╖éΘé▒é╞é╔é╚éΦé▄é╖
é¬üAX é═è∙é╔üuìDé½üvé╞êΩÆvé╡é─éóéΘé╠é┼üAüuìDé½üvé╞üuìgÆâüvé≡öΣèré╖éΘé▒é╞
é╔é╚éΘé╠é┼é╖üBé╡é╜é¬é┴é─üAâ}âbâ`âôâOé═Ä╕ösé╡é▄é╖üB
(ë╘Äq X X) é═ (ë╘Äq ìDé½ ìDé½) é╞é⌐ (ë╘Äq ìgÆâ ìgÆâ) é╠éµéñé╚âfü[â^é╞
êΩÆvé╡é▄é╖é¬üAé▒é╠ÅΩìçé═âfü[â^é╔ê╙ûíé¬éáéΦé▄é╣é±é╦üB
note:
[*1] VTOL é╠âVâôâ{âïé═üAêΩö╩é╠ Lisp é╞êßé┴é─ëpæσżò╢ÄÜé≡ïµò╩é╖éΘé╠é┼üA
é▒é╠ò√û@é¬Ägéªé▄é╖üBæ╝é╔é═üA(? x) é╠éµéñé╔æµéPùvæfé¬ ? é╠âèâXâgé≡
ò╧Éöé╞é╡é╜éΦüA? éΓ * é⌐éτÄné▄éΘâVâôâ{âïé≡ò╧Éöé╞é╖éΘò√û@é¬éáéΦé▄é╖üB
ü¢âpâ^ü[âôò╧Éöé═ÿAæzâèâXâgé┼è╟ù¥é╖éΘ
Lisp é╠ùpîΩé┼é═üAò╧Éöé╔Ælé≡ù^éªéΘé▒é╞é≡üuæ⌐ö¢(binding)üvé╞éóéóé▄é╖üBé▄
é╜üAÆlé¬ù^éªéτéΩé─éóé╚éóüAûóæ⌐ö¢é╠ò╧Éöé≡üuÄ⌐ùRò╧Éöüvé╞î─é╤é▄é╖üBâpâ^ü[âô
ò╧Éöé╠ÅΩìçüAì┼Åëé═Ä⌐ùRò╧Éöé┼éáéΦüAâfü[â^é╞â}âbâ`âôâOé╡é╜Ä₧é╔æ⌐ö¢é│éΩé▄é╖üB
é┬é▄éΦüAÄ⌐ùRò╧Éöé┼éáéΩé╬é╟é±é╚âfü[â^é╞éαêΩÆvé╡é▄é╖é¬üAæ⌐ö¢é│éΩé─éóéΩé╬üA
é╗é╠Ælé≡ĵéΦÅoé╡é─âfü[â^é╞öΣèré╖éΘé▒é╞é╔é╚éΦé▄é╖üBâpâ^ü[âôâ}âbâ`âôâOé≡Ä└
î╗é╖éΘÅΩìçüAé▒é╠ò╧Éöæ⌐ö¢é╠è╟ù¥ò√û@é¬â|âCâôâgé╔é╚éΦé▄é╖üB
é▄é╕üAâIü[â\âhâbâNâXé╔ÿAæzâèâXâgé≡Ägé┴é─âpâ^ü[âôâ}âbâ`âôâOé≡Ä└î╗é╡é─é▌
é▄é╡éσéñüBè╓Éöû╝é═ match é╞é╡é▄é╖üBmatch é═ì─ïAé≡Ägé┴é─âèâXâgé≡ò¬ë≡é╡üA
ùvæfô»Ämé≡öΣèré╡é─éóé½é▄é╖üBmatch é═â}âbâ`âôâOé╔ɼî≈é╡é╜ÅΩìçüAâpâ^ü[âôò╧
Éöé╞é╗é╠Ælé≡èiö[é╖éΘÿAæzâèâXâgé≡ò╘é╡é▄é╖üBìíîπüAé▒é╠ÿAæzâèâXâgé╠é▒é╞é≡
üuæ⌐ö¢âèâXâgüvé╞î─é╘é▒é╞é╔é╡é▄é╖üBăé╠ùßé≡î⌐é─é¡é╛é│éóüB
Lisp > (match '(æ╛ÿY ìDé½ X) '(æ╛ÿY ìDé½ âRü[âqü[) nil)
((X . âRü[âqü[))
Lisp > (match '(æ╛ÿY Y âRü[âqü[) '(æ╛ÿY ìDé½ âRü[âqü[) nil)
((Y . ìDé½))
Lisp > (match '(ë╘Äq X Y) '(ë╘Äq ìDé½ ìgÆâ) nil)
((Y . ìgÆâ) (X . ìDé½))
3 ö╘û┌é╠ê°Éöé═æ⌐ö¢âèâXâgé≡Ä≤é»ÄµéΦé▄é╖üBì┼Åëé═üAé╟é╠âpâ^ü[âôò╧Éöé╔éαÆlé═
ôⁿé┴é─éóé╚éóé╠é┼üAê°Éöé╔é═ nil é≡ôné╡é▄é╖üBmatch é═âpâ^ü[âôò╧Éöé¬é╚é¡é─
éαüAâ}âbâ`âôâOé¬É¼î≈é╡é╜Ä₧é═ nil é≡ò╘é╡é▄é╖üB
Lisp > (match '(æ╛ÿY ìDé½ âRü[âqü[) '(æ╛ÿY ìDé½ âRü[âqü[) nil)
nil
Lisp > (match '(ë╘Äq ìDé½ ìgÆâ) '(ë╘Äq ìDé½ ìgÆâ) nil)
nil
nil é═Ä╕ösé≡ò\é╖é▒é╞é¬òüÆ╩é┼é╖é¬üAé▒é╠ÅΩìçé═æ⌐ö¢âèâXâgé¬ï≤é┼éáéΘé▒é╞é≡ò\
é╡é▄é╖üBé▒é╠é╜é▀üAâ}âbâ`âôâOé¬Ä╕ösé╡é╜ÅΩìçé═üAâVâôâ{âï fail é≡ò╘é╖é▒é╞é╔
é╡é▄é╖üB
Lisp > (match '(æ╛ÿY Y âRü[âqü[) '(æ╛ÿY ìDé½ âRâRâA) nil)
fail
Lisp > (match '(ë╘Äq X X) '(ë╘Äq ìDé½ ìgÆâ) nil)
fail
match é≡ì∞éΘæOé╔üAâpâ^ü[âôò╧Éöé≡è╟ù¥é╖éΘé╜é▀é╠è╓Éöé≡ì∞é┴é─é¿é½é▄é╡éσéñüB
é▄é╕üAùvæfé¬âpâ^ü[âôò╧Éöé┼éáéΘé⌐â`âFâbâNé╖éΘè╓Éö variablep é┼é╖üB
List 1 : ùvæfé═ò╧Éöé⌐
1 (defun variablep (pattern)
2 (and (symbolp pattern)
3 (upper-case-p (char pattern 0))))
ÅqîΩ symbolp é┼ pattern é¬âVâôâ{âïé┼éáéΘé▒é╞é≡èmöFé╡é▄é╖üBò╢ÄÜù±é⌐éτò╢
ÄÜé≡ĵéΦÅoé╖é╔é═è╓Éö char é≡Ägéóé▄é╖üB
char string index
ò╢ÄÜù± string é╠ index ö╘û┌é╠ò╢ÄÜé≡ò╘é╡é▄é╖üBindex é═ 0 é⌐éτÄné▄éΦé▄é╖üB
ò╢ÄÜù±é╠Æ╖é│éµéΦÆ╖éó index é≡ÄwÆΦé╡é╜ÅΩìçé═ nil é≡ò╘é╡é▄é╖üBê°Éö string
é¬âVâôâ{âïé╠ÅΩìçé═üAé╗é╠û╝æOé≡ĵéΦÅoé╡é▄é╖üBè╚ÆPé╚Ägùpùßé≡Īé╡é▄é╡éσéñüB
Lisp > (char "abcde" 0)
#\a
Lisp > (char 'abcde 3)
#\d
Lisp > (char "abcde" 5)
nil
ëpæσò╢ÄÜé≡ö╗ò╩é╖éΘé╔é═üAÅqîΩ upper-case-p é≡Ägéóé▄é╖üB
upper-case-p char
ê°Éöé╠ò╢ÄÜé¬ö╝èpëpÄÜé╠æσò╢ÄÜé╚ÅΩìç t é≡üAé╗éñé┼é╚é»éΩé╬ nil é≡ò╘é╡é▄é╖üB
ïté╔üAëpżò╢ÄÜé≡ö╗ò╩é╖éΘé╔é═ lower-case-p é≡Ägéóé▄é╖üB
variablep é═üAchar é┼ɵô¬ò╢ÄÜé≡ĵéΦÅoé╡é─üAé╗é╠ò╢ÄÜé≡ upper-case-p é┼
â`âFâbâNé╖éΩé╬éóéóé╠é┼é╖üBăé═üAæ⌐ö¢âèâXâgé╔âfü[â^é≡Æ╟ë┴é╖éΘ add-binding
é≡ì∞éΦé▄é╖üB
List 2 : æ⌐ö¢âèâXâgé╔Æ╟ë┴é╖éΘ
1 (defun add-binding (var value binding)
2 (cons (cons var value) binding))
é▒éΩéαè╚ÆPé┼é╖é╦üBê°Éö var é╔ò╧Éöû╝üAvalue é╔ÆlüAbinding é╔æ⌐ö¢âèâXâgé≡
Ä≤é»ÄµéΦé▄é╖üBé▄é╕ cons é┼ var é╞ value é≡âhâbâgæ╬é╔é▄é╞é▀üAé╗éΩé≡ cons
é┼ binding é╠ɵô¬é╔Æ╟ë┴é╡é▄é╖üBò╘éΦÆlé═üAâpâ^ü[âôò╧Éöé≡Æ╟ë┴é╡é╜æ⌐ö¢âèâX
âgé╔é╚éΦé▄é╖üB
ü¢match é╠Ä└æò
é╗éΩé┼é═ match é≡ì∞éΦé▄é╖üBâèâXâgæÇì∞é╠èεû{é┼éáéΘüAcar é╞ cdr é┼âèâXâg
é≡ò¬ë≡é╡é─éóé½üAùvæfé≡öΣèré╡é─éóé½é▄é╖üBé▒é▒é┼î¿è╡éτé╡é╔üAâèâXâgé¬ôÖé╡éó
é⌐â`âFâbâNé╖éΘÅqîΩ equal-list é≡ì∞é┴é─é▌é▄é╡éσéñüBè╚ÆPé╠é╜é▀üAâAâgâÇé╠ö╗
ÆΦé═ÅqîΩ eql é≡Ägéñé▒é╞é╔é╡é▄é╖üBì─ïAÆΦï`é╔è╡éΩé─éóéΩé╬üAé╖é«é╔ì∞éΩéΘé╞
Ävéóé▄é╖é¬üAé╟éñé┼é╡éσéñé⌐üB
ìléªò√é═è╚ÆPé┼é╖üB2 é┬é╠ê°Éöé¬âAâgâÇé┼éáéΩé╬üAeql é┼öΣèré╖éΩé╬éóéóé┼é╖
é╦üBâèâXâgô»Ämé┼éáéΩé╬üAâèâXâgé╠ car é≡öΣèré╡é▄é╖üBé▒é╠Ä₧üAâèâXâgé╠ùvæf
é¬âèâXâgé╠ÅΩìçéαéáéΘé╠é┼üAeql é┼öΣèré╖éΘé▒é╞é═é┼é½é▄é╣é±üBé▒é▒é═ì─ïAé╠Åo
ö╘é┼é╖é╦üBequal-list é≡î─é╤Åoé╡é─öΣèré╖éΩé╬éóéóéφé»é┼é╖üBé╗é╠îïë╩é¬ôÖé╡
éóé╠é┼éáéΩé╬üAâèâXâgé╠ cdr é≡öΣèré╡é▄é╖üBé▒é▒é┼éα equal-list é≡î─é╤Åoé╡
é▄é╖üB2 é┬é╠ê°Éöé¬âAâgâÇé┼éαé╚é¡âèâXâgé┼éαé╚éóÅΩìçé═üAòsêΩÆvé╞ö╗ÆΦé╖éΩé╬
éóéóé┼é╡éσéñüBâvâìâOâëâÇé═ăé╠éµéñé╔é╚éΦé▄é╖üB
List 3 : âèâXâgé¬ôÖé╡éóé⌐
1 (defun equal-list (list1 list2)
2 (cond ((and (atom list1) (atom list2))
3 (eql list1 list2))
4 ((and (consp list1) (consp list2))
5 (if (equal-list (car list1) (car list2))
6 (equal-list (cdr list1) (cdr list2))))
7 (t nil)))
2 ìsû┌é┼âAâgâÇé╠â`âFâbâNüA4 ìsû┌é┼âèâXâgé╠â`âFâbâNé≡ìsé┴é─éóé▄é╖üBlistp
é═ nil é┼éαÉ^é╞ö╗ÆΦé╖éΘé╜é▀üAé▒é▒é┼é═ consp é≡Ägé┴é─éóé▄é╖üB5 ìsû┌é┼üAê°
Éö list1 é╞ list2 é╠ùvæfé≡ car é┼ĵéΦÅoé╡é─üAequal-list é≡ì─ïAî─é╤Åoé╡é╡
é▄é╖üBé╗éΩé¬É^é┼éáéΩé╬üAÄcéΦé╠âèâXâgé≡ equal-list é┼â`âFâbâNé╡é▄é╖üB
match é╠ÅΩìçéαüAèεû{ôIé╚ìléªò√é═ equal-list é╞ô»é╢é┼é╖üBé▒é▒é╔âpâ^ü[âô
ò╧Éöé╠Åêù¥é≡òté»ë┴éªéΩé╬éóéóéφé»é┼é╖üBâpâ^ü[âôò╧Éöé╞é╠â}âbâ`âôâOé═è╓Éö
match-variable é┼ìséóüAâèâXâgé╠öΣèré═è╓Éö match-pieces é┼ìséñé▒é╞é╔é╖éΘ
é╞üAâvâìâOâëâÇé═ăé╠éµéñé╔é╚éΦé▄é╖üB
List 4 : â}âbâ`âôâO
1 (defun match (pattern datum binding)
2 (cond ((variablep pattern)
3 (match-variable pattern datum binding))
4 ((and (atom pattern) (atom datum))
5 (match-atoms pattern datum binding))
6 ((and (consp pattern) (consp datum))
7 (match-pieces pattern datum binding))
8 (t 'fail)))
âpâ^ü[âôò╧Éöé═âVâôâ{âïé╚é╠é┼üAatom é┼ö╗ÆΦé╖éΘé╞É^é╔é╚é┴é─é╡é▄éóé▄é╖üBé▒
é╠é╜é▀üAì┼Åëé╔ variablep é┼ pattern é¬âpâ^ü[âôò╧Éöé⌐â`âFâbâNé╡é─éóé▄é╖üB
pattern é╞ datum é¬âAâgâÇé┼éáéΩé╬ equal é┼öΣèré╡é▄é╖üBé▒é╠Åêù¥é═ match-
atoms é┼ìséóé▄é╖üBpattern é╞ datum é¬âèâXâgé┼éáéΩé╬üAmatch-pieces é┼â`âFâb
âNé≡ìséóé▄é╖üBé▒é▒é┼ match é¬ì─ïAî─é╤Åoé╡é│éΩé▄é╖üBé╗éΩê╚èOé╠ÅΩìçé═ fail
é≡ò╘é╡é▄é╖üB
é▄é╕è╚ÆPé╚ match-atoms é⌐éτî⌐é─éóé½é▄é╡éσéñüB
List 5 : âAâgâÇô»Ämé╠â}âbâ`âôâO
1 (defun match-atoms (pattern datum binding)
2 (if (equal pattern datum) binding 'fail))
pattern é╞ datum é≡ÅqîΩ equal é┼öΣèré╡é▄é╖üBôÖé╡éóÅΩìçé═ÿAæzâèâXâg binding
é≡ò╘é╡üAé╗éñé┼é╚é»éΩé╬ fail é≡ò╘é╡é▄é╖üB
ăé═üAâpâ^ü[âôò╧Éöé╞é╠â}âbâ`âôâOé≡Æ▓é╫éΘ match-variable é┼é╖üB
List 6 : âpâ^ü[âôò╧Éöé╞é╠â}âbâ`âôâO
1 (defun match-variable (var datum binding)
2 (let ((value (assoc var binding)))
3 (if value
4 (match (cdr value) datum binding)
5 (add-binding var datum binding))))
é▄é╕üAæ⌐ö¢âèâXâg binding é⌐éτâpâ^ü[âôò╧Éö var é≡ assoc é┼îƒì⌡é╡é▄é╖üBassoc
é═ö¡î⌐é╡é╜éτâhâbâgæ╬é≡ò╘é╖é╠é┼üAé╗éΩé≡ value é╔âZâbâgé╡é▄é╖üBâpâ^ü[âôò╧
Éöé¬î⌐é┬é⌐éΩé╬üAé╗é╠Ælé≡Ägé┴é─ì─ôxâ}âbâ`âôâOé≡ÄÄé▌é▄é╖üBé▒éΩé═ match é≡
ì─ïAî─é╤Åoé╡é╖éΩé╬éóéóé┼é╖é╦üBÆlé═ (cdr value) é┼ĵéΦÅoé╖é▒é╞é¬é┼é½é▄é╖üB
âpâ^ü[âôò╧Éöé¬ binding é╔û│éóÅΩìçé═üAé╗é╠âpâ^ü[âôò╧Éöé═é▄é╛æ⌐ö¢é│éΩé─éó
é▄é╣é±üBé╗é▒é┼üAadd-binding é≡î─é╤Åoé╡é─üAbinding é╔âpâ^ü[âôò╧Éöé╞Ælé≡ôo
ÿ^é╡é▄é╖üB
ăé═âèâXâgé╠â}âbâ`âôâOé≡ìséñ match-pieces é┼é╖üB
List 7 : âèâXâgé╠â}âbâ`âôâO
1 (defun match-pieces (pattern datum binding)
2 (let ((result (match (car pattern) (car datum) binding)))
3 (if (eq result 'fail)
4 'fail
5 (match (cdr pattern) (cdr datum) result))))
âèâXâgé≡ car é╞ cdr é┼ò¬ë≡é╡é─â}âbâ`âôâOé╡é─éóé½é▄é╖üBé▄é╕ pattern é╞
datum é╠ùvæfé≡ car é┼ĵéΦÅoé╡é─üAmatch é≡ì─ïAî─é╤Åoé╡é╡é▄é╖üBîïë╩é═ result
é╔âZâbâgé╡é▄é╖üBâ}âbâ`âôâOé╔Ä╕ösé╡é╜éτ fail é≡ò╘é╡é▄é╖üBâ}âbâ`âôâOé╔ɼî≈
é╡é╜éτüAÄcéΦé╠âèâXâgé≡ match é┼Æ▓é╫é▄é╖üBé▒é╠Ä₧üAæ⌐ö¢âèâXâgé═ binding é┼
é═é╚é¡ result é≡Ägéñé▒é╞é¬â|âCâôâgé┼é╖üB2 ìsû┌é╠ match é╔éµéΦüAÉVé╡éóâp
â^ü[âôò╧Éöé¬Æ╟ë┴é│éΩé─éóéΘé⌐éαé╡éΩé╚éóé⌐éτé┼é╖üB
é▒éΩé┼âvâìâOâëâÇé═è«É¼é┼é╖üBâvâìâOâëâÇé═âtâ@âCâï MATCH.VL é╔èiö[é│éΩé─
éóé▄é╖üBâgâîü[âXé≡âZâbâgé╡é─ô«é⌐é╡é─é▌éΘé╞üAéµé¡ù¥ë≡é┼é½éΘé╞Ävéóé▄é╖üB
üiédénéeüj